home *** CD-ROM | disk | FTP | other *** search
/ Mac-Source 1994 July / Mac-Source_July_1994.iso / C and C++ / Libraries / usr (gcc 1.37 libs) / mac / crtlocal.c < prev    next >
C/C++ Source or Header  |  1993-12-10  |  3KB  |  146 lines

  1. #include <fcntl.h>
  2. #include <sys/syslimits.h>
  3. #include <string.h>
  4. #include "crtlocal.h"
  5. #include <Events.h>
  6.  
  7. struct crt_fd_tab    crt_fd_tab[OPEN_MAX+1];
  8. char                 crt_defpath[255];
  9. short                 crt_ioVRefNum;
  10. WindowPtr            crt_myWindow;
  11. TEHandle            crt_TEH;
  12. int                    crt_sizeof_qd = sizeof(qd);
  13.  
  14. static char *default_environ[] = {"LOGNAME=jrrk",NULL};
  15.  
  16. char **environ = default_environ;
  17.  
  18. int _fmode = O_BINARY;
  19.  
  20. void mysleep(long t)
  21.     {
  22.     EventRecord event;
  23.     static long oldtemps;
  24.     long temps = TickCount() - oldtemps;
  25.     if ((temps < 0) || (temps >= 120))
  26.         {
  27.         WaitNextEvent(0x0, &event, t, NULL);
  28.         oldtemps += temps;
  29.         }
  30.     }
  31.  
  32. int getdtablesize(void)
  33.     {
  34.     mysleep(1);
  35.     return OPEN_MAX;
  36.     }
  37.  
  38. int getpagesize(void)
  39.     {
  40.     mysleep(1);
  41.     return 8192;
  42.     }
  43.  
  44. void macgetwd(void)    
  45.    {
  46.     VolumeParam pb;
  47.     OSErr err;
  48.     CInfoPBRec  cPB;
  49.     cPB.dirInfo.ioDrParID = 0;
  50.     pb.ioNamePtr = (StringPtr) crt_defpath;
  51.     PBGetVolSync((ParmBlkPtr)&pb);
  52.     crt_ioVRefNum = pb.ioVRefNum;
  53.     crt_defpath[0] = 0;
  54.     do
  55.         {
  56.         char tmp[256];
  57.         strcpy(tmp,crt_defpath);
  58.         /* get information about dir */
  59.         cPB.hFileInfo.ioCompletion = (ProcPtr)0L;
  60.         cPB.hFileInfo.ioNamePtr = (StringPtr)crt_defpath;
  61.         cPB.hFileInfo.ioVRefNum = 0;
  62.         cPB.hFileInfo.ioFDirIndex = -1;
  63.         cPB.hFileInfo.ioDirID = cPB.dirInfo.ioDrParID;
  64.  
  65.         err = PBGetCatInfoSync(&cPB); 
  66.         strcpy(crt_defpath+1+*crt_defpath,tmp);
  67.         crt_defpath[0] = '/';
  68.         }
  69.     while ( /* (cPB.dirInfo.ioDrParID != 2) && */ !err);
  70.     
  71.     }
  72.  
  73. char *getwd(char *fullname)
  74.     {
  75.     char *idx;
  76.     static char sfullname[256];
  77.     if (!*crt_defpath) macgetwd();
  78.     idx = index(crt_defpath+1, '/');
  79.     if (!idx) strcpy(sfullname, "/");
  80.     else strcpy(sfullname, idx);
  81.     if (fullname) strcpy(fullname, sfullname);
  82.     else fullname = sfullname;
  83.     return fullname;
  84.     }
  85.  
  86. char *mycanon(const char *nam)
  87.     {
  88.     char *dest;
  89.     static char path[256];
  90.     getwd(NULL);
  91.     strcpy(path, crt_defpath);
  92.     if (*nam != '/')
  93.         {
  94.         strcat(path,"/");
  95.         }
  96.     else 
  97.         {
  98.         char *idx = index(path+1,'/');
  99.         if (idx) *idx = 0; else path[1] = 0;
  100.         }
  101.     strcat(path,nam);
  102.     dest = path;
  103.     while (*dest)
  104.         {
  105.         if (!strncmp(dest,"/..",3))
  106.             {
  107.             char *last;
  108.             *dest = 0;
  109.             last = rindex(path,'/');
  110.             if (last)
  111.                 {
  112.                  strcpy(last,dest+3);
  113.                  dest = last;
  114.                  }
  115.             else strcpy(dest,dest+3);
  116.             }
  117.         else if (!strncmp(dest,"/.",2))
  118.             {
  119.             strcpy(dest,dest+2);
  120.             }
  121.         else dest++;
  122.         }
  123.     return path;
  124.     }
  125.     
  126. StringPtr cnv_unix_name(const char *nam)
  127.     {
  128.     char *path = mycanon(nam);
  129.     char *dest = path;
  130.     while (*dest)
  131.         {
  132.         if (*dest == '/') *dest = ':';
  133.         dest++;
  134.         }
  135.     path[0] = strlen(path+1);
  136.     return (StringPtr)path;
  137.     }
  138.  
  139. int next_fd(int first)
  140.     {
  141.     int i;
  142.     for (i = first; i < OPEN_MAX; i++)
  143.         if (!crt_fd_tab[i].fd) return i;
  144.     }
  145.     
  146.